;MP3 DOOR BELL ;BARRY ZARUCKI M0DGQ ;DOOR BELL ;NOW 37 TRACKS ;******************************************************************************************************************** LIST p=16F628A ;tell assembler what chip we are using INCLUDE "P16F628A.inc" ;include the defaults for the chip __CONFIG 0x3F18 ;sets the configuration settings ;INT 4mhZ OSC ;************************************************************************************************************** CBLOCK 0x020 DLY_COUNT1 DLY_COUNT2 DLY_COUNT3 DLY_COUNT4 DLY_COUNT5 MUSIC_1 MUSIC_2 ANIMAL CW BUTT_COUNT endc ;END OF DATA MEMORY ;*************************************************************************** ORG 0x0000 ;org sets the origin, 0x0000 for the 16F628, GOTO START ;this is where the program starts running ;*************************************************************************** #DEFINE BUTT PORTA,0 ;DOOR BELL SWITCH #DEFINE LED PORTA,1 ;BUSY LED #DEFINE MODULE PORTB ;MP3 MODULE ;********************************************************************** START errorlevel -302, -305 MOVLW 0x07 ;LOAD 0x07 INTO W MOVWF CMCON ;TURN COMPARATORS OFF CLRF PORTB ;CLEAR PORTB BANKSEL TRISA ;SELECT BANK1 MOVLW b'11111101' ;SET PORTA, ALL OUTPUTS MOVWF TRISA ; MOVLW b'00000000' ;SET PORTB, ALL INPUTS APART FROM RB7 MOVWF TRISB ; BANKSEL PORTA ;SELECT BANK0 MOVLW b'11111111' ;MP3 OFF COMMAND MOVWF MODULE MOVLW .1 ;THESE ARE START OF TRACK IN THE GROUPS MOVWF MUSIC_1 MOVLW .13 MOVWF ANIMAL MOVLW .26 MOVWF MUSIC_2 MOVLW .1 MOVWF BUTT_COUNT ;************************************************************************************ MAIN BTFSS BUTT ;CHECK IF DOOR BELL BUTTON PRESSED GOTO MAIN ;NO CALL DELAY_1 ;WAIT FOR SWITCH BOUNCE BTFSS BUTT ;VALID PRESS SKIP NEXT INSTRUCTION GOTO MAIN ;INVALID PRESS, GO BACK BTFSC BUTT ;HAS BUTTON BEEN RELEASED? GOTO $-1 ;NO CALL DELAY_1 ;YES, WAIT FOR SWITCH BOUNCE BTFSC BUTT ;BOUNCE OVER? GOTO $-4 ;NO GROUP_1 ;VAN HALEN TRACKS. GROUP_1 CONTAINS TWELVE TRACKS, 1 TO 12. PROGRAM UP TO 255 TRACKS TOTAL ACROSS ALL GROUPS. BTFSS BUTT_COUNT,0 ;TEST BUTT_COUNT TO SELECT REQUIRED GROUP GOTO GROUP_2 ;GROUP 2 SELECTED MOVLW .13 ;HAVE WE REACHED END OF TRACKS IN GROUP? XORWF MUSIC_1,W ;XOR MUSIC_1 WITH .21 - ARE THEY THE SAME? BTFSS STATUS,Z ;TEST ZERO BIT GOTO $+3 ;NOT SAME SO BRANCH MOVLW .1 ;BACK TO FIRST TRACK OF GROUP_1 MOVWF MUSIC_1 MOVFW MUSIC_1 ;MOVE MP3 TRACK ADDRESS TO W XORLW .255 ;INVERT FOR CORRECT MP3 TRACK, QUIRK OF MP3 PLAYER MOVWF MODULE ;OUTPUT TRACK ADDRESS ONTO PORT A INCF MUSIC_1 ;INCREMENT MUSIC_1 FOR NEXT TIME AROUND BSF LED ;LIGHT LED CALL DELAY_2 ;PLAY TRACK FOR FOUR SECONDS MOVLW b'11111111' ;LOAD MP3 OFF COMMAND MOVWF MODULE ;TURN OFF MP3 MODULE INCF BUTT_COUNT ;INC REGISTER FOR NEXT GROUP (GROUP_2) BCF LED ;TURN OFF LED GOTO MAIN ;LOOP GROUP_2 ;ANIMAL RECORDINGS AND VH TRACKS. GROUP_2 CONTAINS 12 TRACKS 13 TO 25. PROGRAM UP TO 255 TRACKS TOTAL ACROSS ALL GROUPS. BTFSS BUTT_COUNT,1 ;TEST BUTT_COUNT TO SELECT REQUIRED GROUP GOTO GROUP_3 ;GROUP 3 SELECTED MOVLW .26 ;HAVE WE REACHED END OF TRACKS IN GROUP? XORWF ANIMAL,W ;XOR MUSIC_1 WITH .21 - ARE THEY THE SAME? BTFSS STATUS,Z ;TEST ZERO BIT GOTO $+3 ;NOT SAME SO BRANCH MOVLW .13 ;BACK TO FIRST TRACK OF GROUP_2 MOVWF ANIMAL MOVFW ANIMAL ;MOVE MP3 TRACK ADDRESS TO W XORLW .255 ;INVERT FOR CORRECT MP3 TRACK MOVWF MODULE ;OUTPUT TRACK ADDRESS ONTO PORT A INCF ANIMAL ;INCREMENT ANIMAL FOR NEXT TIME AROUND BSF LED ;LIGHT LED CALL DELAY_2 ;PLAY TRACK FOR FOUR SECONDS MOVLW b'11111111' ;LOAD MP3 OFF COMMAND MOVWF MODULE ;TURN OFF MP3 MODULE MOVLW .4 ;NEXT GROUP (GROUP_3) MOVWF BUTT_COUNT BCF LED ;TURN OFF LED GOTO MAIN ;LOOP GROUP_3 ;MIXED MUSIC TRACKS. GROUP_3 CONTAINS 21 TRACKS 26 TO 47. PROGRAM UP TO 255 TRACKS TOTAL ACROSS ALL GROUPS. BTFSS BUTT_COUNT,2 ;TEST BUTT_COUNT TO SELECT REQUIRED GROUP GOTO MAIN ;GO BACK TO MAIN MOVLW .48 ;HAVE WE REACHED END OF TRACKS IN GROUP? XORWF MUSIC_2,W ;XOR MUSIC_1 WITH .21 - ARE THEY THE SAME? BTFSS STATUS,Z ;TEST ZERO BIT GOTO $+3 ;NOT SAME SO BRANCH MOVLW .26 ;BACK TO FIRST TRACK OF GROUP_3 MOVWF MUSIC_2 MOVFW MUSIC_2 ;MOVE MP3 TRACK ADDRESS TO W XORLW .255 ;INVERT FOR CORRECT MP3 TRACK MOVWF MODULE ;OUTPUT TRACK ADDRESS ONTO PORT A INCF MUSIC_2 ;INCREMENT MUSIC_2 FOR NEXT TIME AROUND BSF LED ;TURN ON LED CALL DELAY_2 ;PLAY TRACK FOR FOUR SECONDS MOVLW b'11111111' ;LOAD MP3 OFF COMMAND MOVWF MODULE ;TURN OFF MP3 MODULE MOVLW .1 ;NEXT GROUP (GROUP_1) MOVWF BUTT_COUNT BCF LED ;TURN OFF LED GOTO MAIN ;LOOP ;******************************************************************************* DELAY_1 ;38mS DELAY FOR SWITCH BOUNCE FOR CRAP SWITCHES MOVLW .100 MOVWF DLY_COUNT1 MOVLW .50 MOVWF DLY_COUNT2 LOOP DECFSZ DLY_COUNT1,1 GOTO LOOP DECFSZ DLY_COUNT2,1 GOTO LOOP RETURN ;********************************************************************** DELAY_2 ;4 SECOND DELAY TRACK PLAY DURATION MOVLW .100 MOVWF DLY_COUNT3 MOVLW .100 MOVWF DLY_COUNT4 MOVLW .22 MOVWF DLY_COUNT5 LOOP2 DECFSZ DLY_COUNT3,1 GOTO LOOP2 DECFSZ DLY_COUNT4,1 GOTO LOOP2 DECFSZ DLY_COUNT5,1 GOTO LOOP2 RETURN ;****************************************************************************** END